package com.yhn.shortlink.admin.controller;

import com.yhn.shortlink.admin.dto.req.user.UserLoginReqDTO;
import com.yhn.shortlink.admin.dto.req.user.UserRegisterReqDTO;
import com.yhn.shortlink.admin.dto.req.user.UserUpdateReqDTO;
import com.yhn.shortlink.admin.dto.resp.user.UserLoginRespDTO;
import com.yhn.shortlink.admin.dto.resp.user.UserRespDTO;
import com.yhn.shortlink.common.model.BaseResponse;
import com.yhn.shortlink.common.model.ResultUtils;
import com.yhn.shortlink.admin.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

/**
 * @author yhn
 * @version 1.0
 * @description
 * @date 2024/7/21 13:34
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户信息
     */
    @GetMapping("/{username}")
    public BaseResponse<UserRespDTO> getUserByUserName(@PathVariable String username) {
        return ResultUtils.success(userService.getUserByUserName(username));
    }

    /**
     * 判断用户名是否已存在
     *
     * @param username 用户名
     * @return 是否存在
     */
    @GetMapping("/hasUserName")
    public BaseResponse<Boolean> availableUsername(@RequestParam("username") String username) {
        return ResultUtils.success(userService.availableUsername(username));
    }

    /**
     * 用户注册
     */
    @PostMapping("/register")
    public BaseResponse<Boolean> register(@RequestBody UserRegisterReqDTO userRegisterReqDTO) {
        return ResultUtils.success(userService.register(userRegisterReqDTO));
    }

    /**
     * 修改用户信息
     */
    @PostMapping("/update")
    public BaseResponse<Boolean> updateInfo(@RequestBody UserUpdateReqDTO userUpdateReqDTO) {
        return ResultUtils.success(userService.updateInfo(userUpdateReqDTO));
    }

    /**
     * 用户登录
     */
    @PostMapping("/login")
    public BaseResponse<UserLoginRespDTO> login(@RequestBody UserLoginReqDTO userLoginReqDTO) {
        return ResultUtils.success(userService.login(userLoginReqDTO));
    }

    /**
     * 判断用户是否登录
     */
    @GetMapping("/isLogin")
    public BaseResponse<Boolean> checkLogin(@RequestParam("username") String username, @RequestParam("token") String token) {
        return ResultUtils.success(userService.checkLogin(username, token));
    }

    /**
     * 退出登录
     */
    @PostMapping("/logout")
    public BaseResponse<Boolean> logout(@RequestParam("username") String username, @RequestParam("token") String token) {
        return ResultUtils.success(userService.logout(username, token));
    }
}
